package com.hafu.swing;

import com.hafu.model.LiveClass;
import com.hafu.service.LiveClassService;

import javax.swing.*;
import javax.swing.table.DefaultTableModel;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.List;

// 直播课堂面板
public class LiveClassPanel extends JPanel {
    private LiveClassService liveClassService;
    private JTable liveClassTable;
    private DefaultTableModel tableModel;
    private JTextField searchField;

    public LiveClassPanel(JPanel parentPanel, LiveClassService liveClassService) {
        this.liveClassService = liveClassService;
        setLayout(new BorderLayout());

        // 顶部工具栏
        JPanel toolbarPanel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        JButton refreshButton = new JButton("刷新");
        searchField = new JTextField(15);
        JButton searchButton = new JButton("搜索");

        toolbarPanel.add(new JLabel("课程名称:"));
        toolbarPanel.add(searchField);
        toolbarPanel.add(searchButton);
        toolbarPanel.add(refreshButton);

        // 表格数据
        String[] columnNames = {"课程ID", "课程名称", "主讲教师", "直播时间", "课程状态", "操作"};
        tableModel = new DefaultTableModel(columnNames, 0) {
            @Override
            public boolean isCellEditable(int row, int column) {
                return column == 5; // 只允许编辑最后一列(操作)
            }
        };
        liveClassTable = new JTable(tableModel);
        liveClassTable.setRowHeight(30);

        // 设置列宽
        liveClassTable.getColumnModel().getColumn(0).setPreferredWidth(80);
        liveClassTable.getColumnModel().getColumn(1).setPreferredWidth(150);
        liveClassTable.getColumnModel().getColumn(2).setPreferredWidth(100);
        liveClassTable.getColumnModel().getColumn(3).setPreferredWidth(150);
        liveClassTable.getColumnModel().getColumn(4).setPreferredWidth(80);
        liveClassTable.getColumnModel().getColumn(5).setPreferredWidth(100);

        JScrollPane scrollPane = new JScrollPane(liveClassTable);

        // 加载直播数据
        loadLiveData();

        // 搜索按钮事件
        searchButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                String keyword = searchField.getText().trim();
                if (!keyword.isEmpty()) {
                    searchLiveClasses(keyword);
                } else {
                    loadLiveData();
                }
            }
        });

        // 刷新按钮事件
        refreshButton.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                loadLiveData();
            }
        });

        add(toolbarPanel, BorderLayout.NORTH);
        add(scrollPane, BorderLayout.CENTER);
    }

    // 加载直播数据（修复空指针异常）
    private void loadLiveData() {
        System.out.println("[LiveClassPanel] 开始加载直播数据...");

        // 检查 tableModel 是否为 null
        if (tableModel == null) {
            System.out.println("[警告] tableModel 为 null，无法加载数据");
            return;
        }

        tableModel.setRowCount(0);

        // 检查 liveClassService 是否为 null
        if (liveClassService == null) {
            System.out.println("[警告] liveClassService 为 null，无法获取直播数据");
            return;
        }

        List<LiveClass> liveClasses = liveClassService.getAllLiveClasses();

        // 检查 liveClasses 列表是否为 null
        if (liveClasses == null) {
            System.out.println("[警告] liveClassService.getAllLiveClasses() 返回 null，改用空列表");
            liveClasses = new ArrayList<>();
        }

        System.out.println("[LiveClassPanel] 共获取 " + liveClasses.size() + " 条直播数据");

        for (int i = 0; i < liveClasses.size(); i++) {
            LiveClass liveClass = liveClasses.get(i);

            // 打印直播课程信息（用于调试）
            System.out.println("[加载直播课程 #" + (i + 1) + "] " + liveClass);

            // 检查 liveClass 对象是否为 null
            if (liveClass == null) {
                System.out.println("[警告] 直播课程对象为 null，跳过该条数据");
                continue;
            }

            // 检查课程ID是否为 null
            if (liveClass.getClassId() == null) {
                System.out.println("[警告] 课程ID为null，跳过该条数据");
                continue;
            }

            // 获取主讲教师名称
            String teacherName = "未知教师";
            try {
                if (liveClass.getTeacherId() != null) {
                    teacherName = liveClassService.getTeacherName(liveClass.getTeacherId());
                }
            } catch (Exception e) {
                System.out.println("[警告] 获取教师名称失败: " + e.getMessage());
            }

            // 为每个属性添加空值检查
            Object[] rowData = {
                    liveClass.getClassId(),
                    liveClass.getClassName() != null ? liveClass.getClassName() : "（课程名称为空）",
                    teacherName,
                    liveClass.getLiveTime() != null ? liveClass.getLiveTime() : "（时间为空）",
                    liveClass.getStatus() != null ? liveClass.getStatus() : "（状态未知）",
                    "进入直播"
            };
            System.out.println("[LiveClassPanel] 添加行数据: " + rowData[0] + ", " + rowData[1]);
            tableModel.addRow(rowData);
        }

        System.out.println("[LiveClassPanel] 直播数据加载完成");
    }

    // 搜索直播课程
    private void searchLiveClasses(String keyword) {
        System.out.println("[LiveClassPanel] 搜索直播课程: " + keyword);

        if (tableModel == null) {
            System.out.println("[警告] tableModel 为 null，无法搜索数据");
            return;
        }

        if (liveClassService == null) {
            System.out.println("[警告] liveClassService 为 null，无法搜索直播数据");
            return;
        }

        tableModel.setRowCount(0);
        List<LiveClass> liveClasses = liveClassService.searchLiveClasses(keyword);

        if (liveClasses == null) {
            System.out.println("[警告] liveClassService.searchLiveClasses() 返回 null，改用空列表");
            liveClasses = new ArrayList<>();
        }

        for (LiveClass liveClass : liveClasses) {
            if (liveClass == null) {
                System.out.println("[警告] 直播课程对象为 null，跳过该条数据");
                continue;
            }

            // 获取主讲教师名称
            String teacherName = "未知教师";
            try {
                if (liveClass.getTeacherId() != null) {
                    teacherName = liveClassService.getTeacherName(liveClass.getTeacherId());
                }
            } catch (Exception e) {
                System.out.println("[警告] 获取教师名称失败: " + e.getMessage());
            }

            Object[] rowData = {
                    liveClass.getClassId() != null ? liveClass.getClassId() : "（课程ID为空）",
                    liveClass.getClassName() != null ? liveClass.getClassName() : "（课程名称为空）",
                    teacherName,
                    liveClass.getLiveTime() != null ? liveClass.getLiveTime() : "（时间为空）",
                    liveClass.getStatus() != null ? liveClass.getStatus() : "（状态未知）",
                    "进入直播"
            };
            tableModel.addRow(rowData);
        }
    }

    // 刷新数据
    public void refreshData() {
        loadLiveData();
    }
}
